class Stack {
    constructor() {
        this.items = [];
    }

    // push a new item 压栈 添加元素
    push(item) {
        this.items.push(item);
    }

    // pop a new item 出栈 弹出栈顶元素
    pop() {
        if (this.isEmpty()) {
            alert("栈为空")
        } else {
            return this.items.pop();
        }
    }
    // peek 查看栈顶元素 仅查看无其他操作
    peek() {
        if (this.isEmpty()) {
            alert("栈为空")
        } else {
            return this.items[this.items.length - 1];
        }
    }

    // isEmpty() 判断栈是否为空
    isEmpty() {
        return this.items.length === 0;
    }

    // size() 获取栈中元素个数
    size() {
        return this.items.length;
    }

    // toString() 返回以字符串形式的栈内元素数据
    toString() {
        let result = '';
        for (let item of this.items) {
            result += item + ' ';
        }
        return result;
    }
}

console.log('/--------栈封装测试-----------/')
const stack = new Stack();
// push
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)
stack.push(5)
stack.push(6)
console.log('push后的stack', stack)
// pop
stack.pop()
console.log('pop后的stack', stack)
console.log(stack.peek())

// 十进制转二进制
function decbin(dec) {
    const stack = new Stack();
    while (dec > 0) {
        stack.push(dec % 2);//获取余数 放入栈中
        dec = Math.floor(dec / 2);//向下取整
    }
    let bin = '';
    // 不断地从栈中取出元素（0 或 1），并拼接到一起。
    while (!stack.isEmpty()) {
        bin += stack.pop();
    }

    return bin;
}

console.log(decbin(1024))